#include <stdio.h>
#include <math.h>
/*
关于solidworks的齿轮建模小助手，输入齿轮参数，自动计算！
                --------------------By Zy 2025-3-16
感谢b站up忙了一天的高师傅的视频分享，原视频在https://b23.tv/QkCvb3P
*/
#define PI 3.14159265358979323846

int main() {
    double m, z;
    printf("关于Solidworks的齿轮建模小助手，输入齿轮参数，自动计算！");
    printf("                           --------------------By Zy");
    printf("程序开始运行......\n");
    printf("模数反映齿轮齿的大小，越大齿越粗大，两个齿轮需要啮合模数要一致\n");
    printf("请输入模数 m（单位：mm）：");
    scanf("%lf", &m);
    printf("请输入齿数 z：");
    scanf("%lf", &z);

    double ha_star = 1.0; // 齿顶高系数
    double c_star = 0.25; // 顶隙系数
    double alpha =  PI / 9.0; // 压力角，单位：弧度

    // 计算齿轮参数
    double d = m * z; // 分度圆直径
    double ha = (z + 2 * ha_star) * m; // 齿顶圆直径
    double hf = (z - 2 * ha_star - 2 * c_star) * m; // 齿根圆直径
    double db = d * cos(alpha); // 基圆直径
    double rb = db / 2; // 基圆半径

    // 输出计算结果
    printf("\n手把手开建!\n");
    printf("1.绘制基圆，基圆直径 db = %.3f mm\n", db);
    printf("2.绘制渐开线，齿轮在渐开线上啮合，样条曲线下拉选择方程式驱动的曲线\n");
    printf("选择参数型，Xt Yt t1 t2分别依次输入下面四行：\n");
    printf("%.3f*sin(t)-%.3f*t*cos(t)\n",rb,rb);
    printf("%.3f*cos(t)+%.3f*t*sin(t)\n",rb,rb);
    printf("0\n");
    printf("pi/3\n");
    printf("点击确定，添加固定的几何关系\n");
    printf("3.绘制齿顶圆，直径为 %.3f mm\n", ha);
    printf("4.绘制齿根圆，直径为 %.3f mm\n", hf);
    printf("注意，若齿根圆直径小于基圆则在齿根圆和基圆之间用样条曲线连起来(延长渐开线)\n");
    printf("裁剪渐开线，只保留齿根圆和齿顶圆之间的渐开线，同时裁剪基圆\n");
    printf("5.绘制分度圆，相当于辅助线，在分度圆上齿厚和齿槽宽相等\n");
    printf("分度圆直径 d = %.3f mm\n", d);
    printf("6.寻找镜像轴，画一条中心线，计为a，一个端点为齿轮中心，另一个为渐开线和分度圆的交界点\n");
    printf("下面绘制2根中心线，起点均为齿轮中心，分别记为b，c，与a的角度分别为%.3f,%.3f\n",360/z/4,3*360/z/4);
    printf("以b为镜像轴（从左向右第二个中心线）镜像渐近线\n");
    printf("以c为镜像轴（从左向右第三个中心线）镜像刚刚镜像的渐近线\n");
    printf("新绘制草图，转换实体引用，把3条渐近线和齿根圆，齿顶圆描下来\n");
    printf("隐藏上一个草图，裁剪实体，裁剪到只剩一个齿轮和一个小短弧（弧在齿根圆上，两个起点分别为刚刚镜像的2个渐近线）\n");
    printf("PS:视频07：48处，不懂的直接看\n");
    printf("解除上一个草图隐藏，线性草图阵列下拉选圆周草图阵列，方向选齿顶圆，实例数填齿数，镜像实体选择刚刚描的图形\n");
    printf("完成齿轮草图绘制！拉伸即可！\n");
    printf("喜欢的不妨点个Star，祝你的齿轮严丝合缝！\n");
    return 0;
}

